 //
//  OauthViewController.swift
//  sina
//
//  Created by 江先铨 on 15/11/11.
//  Copyright © 2015年 jxqstatic. All rights reserved.
//

import UIKit
import SVProgressHUD
import  AFNetworking

class OauthViewController: UIViewController {

    
    override func viewDidDisappear(animated: Bool) {
    
        SVProgressHUD.dismiss()
    }
    
  @objc private func autoFull() {
    
    let jsString = "document.getElementById('userId').value = '814142015@qq.com' , document.getElementById('passwd').value = 'xian19911003!'" //这个是一个js 代码  每当程序执行到这 就加载js代码
    
    web.stringByEvaluatingJavaScriptFromString(jsString)
    
    }
    
   @objc private func close() { //点击关闭按钮之后 控制器销毁掉
    
       dismissViewControllerAnimated(true, completion: nil)
    }
    
    let web = UIWebView()
    override func loadView() {
        
        view = web  //在程序加载view的时候就开始 webview 给默认的view
        web.delegate = self
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        setUI()
        
        loadOauthPage()
        
    }

    func loadOauthPage() {
    
        let urlString = "https://api.weibo.com/oauth2/authorize?" + "client_id=" + client_id + "&redirect_uri=" + redirect_uri
        
        let url = NSURL(string: urlString)
        
        let request = NSURLRequest(URL: url!)
        
        web.loadRequest(request)  //发送网络请求  加载页面 调用代理方法  
        
    }
    
    func setUI() {
    
    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", style: .Plain, target: self, action: "close")
        
     navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: .Plain, target: self, action: "autoFull")
    }
    
}


extension    OauthViewController: UIWebViewDelegate {
  
    func webViewDidStartLoad(webView: UIWebView) {
        
        SVProgressHUD.show()
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
      SVProgressHUD.dismiss()
    }

    
    //协议方法 如果返回bool 一般表示如果是true  表示当前对象可以正常共走 否则就不能
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {  //加载网络请求 的
        //print(request.URL)
        
        guard let urlString = request.URL?.absoluteString  else{ //利用守卫 如果没被加载 就说明可能没有网 或者没有加载出来 就返回 这样就可以保证下面一定有值
        
            return false
        }
        
        if urlString.hasPrefix("https://api.weibo.com") { //如果有这个前缀就说明正在加载网页授权 这样就需要让函数往下继续执行
        
             return true
        }
        
        if !urlString.hasPrefix(redirect_uri) { //这个是加载完成授权网页之后的回调 如果后面的加载完成的网页授权有回调  就补让过去 这样保证在下面的一定就是code 的代码也
        
           return false
        }
       // print(urlString)
        
        guard  let query = request.URL?.query else { //这个query 查询是把原来的网站之后的字符串给截取出来 相当于把 get请求后面拼接的字符串给取出来
        
            return false
        }
        
       // print(query)
        let str = "code="
        
        let code = query.substringFromIndex(str.endIndex) //在这里获取code 的值
        
       // print(code)
        ViewModel().loadAccesstoken(code) { (error) -> () in
             //print("come here")
            if error != nil {  //授权加载完成之后跳到这里
            
             SVProgressHUD.showInfoWithStatus("加载失败, 情稍后在来")
            }
            
            
           self.dismissViewControllerAnimated(false, completion: { () -> Void in //登录成功之后就跳到欢迎界面 在这里不能动画效果要设置成false 如果设置成true 的时候 会先弹出一个登录窗口在弹出欢迎界面  而且在这里也需要在试图消失之后在通知跳转控制器 这样的不会产生层次的嵌套  这是因为数据在加载的时候不会立即消失 如果吧通知写到完成是得外面会形成堆积的界面
            
            NSNotificationCenter.defaultCenter().postNotificationName(APPSwithRootViewController, object: "oauthWithwelcome") //发通知告诉控制器跳转
           })
        }
        
        return false
        
    }
}

